package com.example.common.domain.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.example.common.domain.pojo.Converter.ListToJsonConverter;
import com.example.common.domain.pojo.Deserialize.ListToStringDeserializer;
import com.example.common.domain.pojo.Deserialize.MapToStringDeserializer;
import com.example.common.domain.pojo.TypeHandler.ListJsonTypeHandler;
import com.example.common.domain.pojo.TypeHandler.MapJsonTypeHandler;
import com.example.common.enums.DifficultyLevel;
import com.example.common.enums.QuestionType;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import jakarta.persistence.*;
import lombok.Data;
import com.example.common.domain.pojo.Converter.MapToJsonConverter;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Collections;
import java.util.List;
import java.util.Map;


@Data
@Table(name = "question")
public class Question  {
    @Id
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    private String questionText;
    private String courseId;       //课程id

//    @Enumerated(EnumType.STRING) // 关键注解，存储枚举的 value 字段
    private QuestionType type;  //类型
//    @Enumerated(EnumType.STRING) // 关键注解，存储枚举的 value 字段
    private DifficultyLevel difficulty;  //难度

    /**
     * 选项 (主要用于选择题、匹配题等)
     * 对于选择题: Key可以是选项标签 (A, B, C), Value是选项内容。
     * 对于填空题: 可以不使用，或用List<String>表示多个空。
     * 对于匹配题: Key是待匹配项，Value是选项。
     */
//    @TableField(typeHandler = MapJsonTypeHandler.class)
    private String options;
//    private Map<String, String> options;
    /**
     * 参考答案
     * 对于选择题: 可能是选项的Key (如 "A") 或选项内容。
     * 对于多选题: 可以是 List<String> (如 ["A", "C"])。
     * 对于填空题: 可以是 List<String>，每个元素对应一个空的答案。
     * 对于判断题: 可以是 "True" 或 "False" (或布尔值，但字符串更灵活)。
     * 对于简答/论述题: 是标准答案文本。
     */
//    @TableField(typeHandler = ListJsonTypeHandler.class)
    private String correctAnswers; // 使用List以支持多答案（如多选题、多个填空）
//    private List<String> correctAnswers; // 使用List以支持多答案（如多选题、多个填空）

//    @TableField(typeHandler = ListJsonTypeHandler.class)
    private String knowledgePoints;  //知识点id
//    private List<String> knowledgePoints;  //知识点id
    /**
     * 题目分数
     */
    private Double score;
    /**
     * 备注或提示信息
     */
    private String remarks;
    private String explanation;   //解析

    /**
     * 题目相关的媒体资源URL (例如，图片、音频、视频链接)
     */
    private String mediaUrl;

    private Timestamp createdAt;  //创建时间

    private Timestamp updatedAt;  //更新时间

    // ObjectMapper 实例（建议注入或静态使用）
    private static final ObjectMapper objectMapper = new ObjectMapper();

    // 将 correctAnswers 转换为 List<String>
    public List<String> getCorrectAnswerList() {
        if (correctAnswers == null || correctAnswers.isEmpty()) {
            return Collections.emptyList();
        }
        try {
            return objectMapper.readValue(correctAnswers, new TypeReference<List<String>>() {});
        } catch (Exception e) {
            return Collections.emptyList(); // 出错返回空列表
        }
    }

    public List<String> getKnowledgePointList() {
        if (knowledgePoints == null || knowledgePoints.isEmpty()) {
            return Collections.emptyList();
        }
        try {
            return objectMapper.readValue(knowledgePoints, new TypeReference<List<String>>() {});
        } catch (Exception e) {
            return Collections.emptyList(); // 出错返回空列表
        }
    }

    // 将 options 转换为 Map<String, String>
    public Map<String, String> getOptionsMap() {
        if (options == null || options.isEmpty()) {
            return Collections.emptyMap();
        }
        try {
            return objectMapper.readValue(options, new TypeReference<Map<String, String>>() {});
        } catch (Exception e) {
            return Collections.emptyMap(); // 出错返回空映射
        }
    }




}
